Computing devices provide a variety of functionality to users. For instance, a program can execute on a computing device to enable users to complete various tasks. However, the program can include errors that cause the tasks to not function as expected, which can lead to user frustration.
Traditional techniques to identify errors in a program typically require capturing or having access to each part of the program. For instance, a typical debug tool receives a recording of a whole program (i.e., each of the inputs and outputs) and identifies an error that occurs during execution of the whole program. In some instances, a copy of the program is recorded in its entirety while the program executes. The recorded copy of the program can be saved as a trace file and can be used to investigate and test the program for an execution error. However, when any portion of the whole program is missing or removed the typical debug tool cannot replicate the program and thus cannot locate execution errors. Thus, traditional techniques used to investigate and test programs may be ineffective and can lead to user frustration.
In addition, performing conventional trace techniques can interrupt operation of a computing device due to an amount of data being processed while performing the trace. This delay in computer operation can be accentuated when tracing multiple programs simultaneously and/or trancing a large number of instructions. Accordingly, tracing using conventional techniques can reduce overall performance of a computing device and may not be applicable to programs of a particular size.